package com.example.demo.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.theokanning.openai.client.OpenAiApi;
import com.theokanning.openai.service.OpenAiService;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import retrofit2.Retrofit;
import java.time.Duration;

/**
 * DeepSeek AI配置类
 * 负责配置和创建OpenAiService实例，用于与DeepSeek API进行通信
 * 
 * 该配置类通过自定义Retrofit客户端来支持DeepSeek的API端点，
 * 并设置适当的超时时间以确保连接稳定性
 * 
 * @author AI Demo
 * @version 1.0
 */
@Configuration
public class DeepSeekConfig {

    /** DeepSeek API密钥，从配置文件中读取 */
    @Value("${deepseek.api-key}")
    private String apiKey;

    /** DeepSeek API基础URL，从配置文件中读取 */
    @Value("${deepseek.base-url}")
    private String baseUrl;

    /**
     * 创建OpenAiService Bean
     * 
     * 由于DeepSeek使用与OpenAI兼容的API格式，我们可以使用OpenAI的Java客户端，
     * 但需要自定义配置以指向DeepSeek的API端点
     * 
     * @return 配置好的OpenAiService实例
     */
    @Bean
    public OpenAiService openAiService() {
        // 使用默认的JSON映射器配置
        ObjectMapper mapper = OpenAiService.defaultObjectMapper();
        
        // 创建HTTP客户端，设置API密钥和60秒超时
        OkHttpClient client = OpenAiService.defaultClient(apiKey, Duration.ofSeconds(60));
        
        // 创建自定义Retrofit实例，指向DeepSeek API端点
        Retrofit retrofit = OpenAiService.defaultRetrofit(client, mapper)
                .newBuilder()
                .baseUrl(baseUrl)  // 设置DeepSeek的API基础URL
                .build();
        
        // 创建API接口实例
        OpenAiApi api = retrofit.create(OpenAiApi.class);
        
        // 返回配置好的OpenAiService实例
        return new OpenAiService(api, client.dispatcher().executorService());
    }
}